package fabricas;

import interfaces.*;
import repositorios.AnexoProcessoDAOHibernate;
import repositorios.LogEventosDAOHibernate;
import repositorios.ProcessoDAOHibernate;
import repositorios.SetorDAOHibernate;
import repositorios.TramitacaoAnexoDAOHibernate;
import repositorios.TramitacaoVolumeDAOHibernate;
import repositorios.UnidadeMilitarDAOHibernate;
import repositorios.UsuarioDAOHibernate;
import repositorios.VolumeProcessoDAOHibernate;
/**
 *
 * @author Marcelo G. Neto
 */
// Padrão MVC
// MODEL: Representa as camadas de acesso a dados e regra de negócio.

/* Essa classe tem a intenção de ser o construtor de DAOs.
 * Ela deverá ser o único ponto do sistema em que as classes DAO são instanciadas.
 * Ela permitirá que uma classe que contenha as regras de negócio (exemplo: PessoaRN), obtenha uma instância de InterfacePessoaDAO
 * sem se preocupar com a forma como o InterfacePessoaDAO funciona internamente. É nela que criaremos uma instância
 * de PessoaDAOHibernate e atribuiremos a Session nesse objeto.
 */

public class DAOFabrica
{
    public static InterfaceUsuarioDAO criarUsuarioDAO()
    {
        UsuarioDAOHibernate interfaceUsuarioDAO = new UsuarioDAOHibernate();
        interfaceUsuarioDAO.setSessao(ConexaoHibernateFabrica.getSessionFactory().getCurrentSession());
        return interfaceUsuarioDAO;
    }
 
    public static InterfaceUnidadeMilitarDAO criarUnidadeMilitarDAO() 
    {
        UnidadeMilitarDAOHibernate interfaceUnidadeMilitarDAO = new UnidadeMilitarDAOHibernate();
        interfaceUnidadeMilitarDAO.setSessao(ConexaoHibernateFabrica.getSessionFactory().getCurrentSession());
        return interfaceUnidadeMilitarDAO;
    }

    public static InterfaceSetorDAO criarSetorDAO() 
    {
        SetorDAOHibernate interfaceSetorDAO = new SetorDAOHibernate();
        interfaceSetorDAO.setSessao(ConexaoHibernateFabrica.getSessionFactory().getCurrentSession());
        return interfaceSetorDAO;
    }
    
    public static InterfaceProcessoDAO criarProcessoDAO() 
    {
        ProcessoDAOHibernate interfaceProcessoDAO = new ProcessoDAOHibernate();
        interfaceProcessoDAO.setSessao(ConexaoHibernateFabrica.getSessionFactory().getCurrentSession());
        return interfaceProcessoDAO;
    }
    
    public static InterfaceVolumeProcessoDAO criarVolumeProcessoDAO() 
    {
        VolumeProcessoDAOHibernate interfaceVolumeProcessoDAO = new VolumeProcessoDAOHibernate();
        interfaceVolumeProcessoDAO.setSessao(ConexaoHibernateFabrica.getSessionFactory().getCurrentSession());
        return interfaceVolumeProcessoDAO;
    }

    public static InterfaceAnexoProcessoDAO criarAnexoProcessoDAO() 
    {
        AnexoProcessoDAOHibernate interfaceAnexoProcessoDAO = new AnexoProcessoDAOHibernate();
        interfaceAnexoProcessoDAO.setSessao(ConexaoHibernateFabrica.getSessionFactory().getCurrentSession());
        return interfaceAnexoProcessoDAO;
    }
        
    public static InterfaceTramitacaoVolumeDAO criarTramitacaoVolumeDAO() 
    {
        TramitacaoVolumeDAOHibernate interfaceTramitacaoVolumeDAO = new TramitacaoVolumeDAOHibernate();
        interfaceTramitacaoVolumeDAO.setSessao(ConexaoHibernateFabrica.getSessionFactory().getCurrentSession());
        return interfaceTramitacaoVolumeDAO;
    }
    
    public static InterfaceTramitacaoAnexoDAO criarTramitacaoAnexoDAO() 
    {
        TramitacaoAnexoDAOHibernate interfaceTramitacaoAnexoDAO = new TramitacaoAnexoDAOHibernate();
        interfaceTramitacaoAnexoDAO.setSessao(ConexaoHibernateFabrica.getSessionFactory().getCurrentSession());
        return interfaceTramitacaoAnexoDAO;
    }

    public static InterfaceLogEventosDAO criarLogEventosDAO() 
    {
        LogEventosDAOHibernate interfaceLogEventosDAO = new LogEventosDAOHibernate();
        interfaceLogEventosDAO.setSessao(ConexaoHibernateFabrica.getSessionFactory().getCurrentSession());
        return interfaceLogEventosDAO;
    }
}